import axios from "axios";
import { ElLoading, ElMessage } from 'element-plus'
import store from "../store/index";
let loadingObj=null//loading实例
//使用create方法创建axios实例
const Service = axios.create({
    timeout: 8000, //请求超时时间
    baseURL:"http://127.0.0.1:8888/api/private/v1/",//请求地址
    headers:{
        "Content-Type": "application/json;charset=utf-8",
        "Authorization":store.state.uInfo.userInfo.token//请求头中添加token
    }
})
//请求拦截器-请求前拦截-在请求头中添加token-增加loading动画等
Service.interceptors.request.use(config => {
    loadingObj=ElLoading.service({
        lock: true,//lock是否显示动画
        text: 'Loading',//加载文案
        background: 'rgba(0, 0, 0, 0.7)',//背景色
      })
      return config
})
//响应拦截器-响应后拦截-关闭loading动画
Service.interceptors.response.use(response => {//Service.interceptors.response.use()方法接收一个回调函数，该回调函数接收一个参数response，表示服务器响应的数据
    loadingObj.close()//关闭loading动画,防止遮挡页面
    const data=response.data//获取响应数据
    if(!data.meta.status!=200){ //判断服务器返回的状态码是否不等于200
        ElMessage.error(data.meta.msg||"服务器错误")//ErrorMessage提示错误信息,data.meta.msg是服务器返回的错误信息，meta是服务器返回的额外信息
        
        return data//返回数据
    }
    return response.data//返回数据
},error => {//响应错误处理
    loadingObj.close()//关闭loading动画,防止遮挡页面
    ElMessage({
        message:"服务器错误",//提示信息
        type:"error",//提示类型
        duration:2000//提示持续时间
    })
})

//post请求
export const post=config=>{
    return Service({//调用axios实例
        ...config,//将config对象解构赋值给config变量
        method:"post",//请求方法
        data:config.data//请求参数
    })
}
//get请求
export const get=config=>{
    return Service({
        ...config,//将config对象解构赋值给config变量
        method:"get",//请求方法
        params:config.data//请求参数
    })
}
//put请求
export const put=config=>{
    return Service({//调用axios实例
        ...config,//将config对象解构赋值给config变量
        method:"put",//请求方法
        data:config.data//请求参数
    })
}
//delete请求
export const del=config=>{
    return Service({//调用axios实例
        ...config,//将config对象解构赋值给config变量
        method:"delete",//请求方法
    })
}